﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Data;
using System.Text;
using System.Reflection;
using System.Data.Common;
using System.Data.OracleClient;

namespace FancyIdea.PingShui.Core.Dal
{
    public class 基本信息操作
    {
        public static bool Add(String table, object o)
        {
            List<string> fields = new List<string>();
            List<string> paramNames = new List<string>();
            List<DbParameter> parameters = new List<DbParameter>();

            PropertyInfo[] props = o.GetType().GetProperties();
            foreach (PropertyInfo prop in props)
            {
                fields.Add(prop.Name);
                string pname = "P" + prop.GetHashCode();
                paramNames.Add(":" + pname);
                object value = prop.GetValue(o, null);
                if (value == null) { value = DBNull.Value; }
                parameters.Add(new OracleParameter(pname, value));
            }

            string sql = string.Format("insert into {0}({1}) values({2})",
                table, string.Join(",", fields.ToArray()),
                string.Join(",", paramNames.ToArray()));

            using (OracleCmd cmd = new OracleCmd())
            {
                cmd.SetCommand(sql).AddParameter(parameters.ToArray());
                try
                {
                    return cmd.ExecuteNonQuery() > 0;
                }
                catch
                {
                    return false;
                }
            }
        }

        /**
         * 添加纳税户基本信息
         * */
        public static bool AddBaseInfo(基本信息 baseInfo)
        {
            string sql = @"insert into 基本信息表 (纳税人类别,纳税人代码,纳税人名称,税务机关代码,
税收管理员代码,操作时间,街道代码,门牌号码,建筑物代码,楼层,法定代表人,手机号码,座机号码,地方税务登记证号码,
行业代码,行业细目代码,经营范围,征收品目代码,税收定额) values (" + baseInfo.纳税人类别 + ",'" + baseInfo.纳税人代码
+ "','" + baseInfo.纳税人名称 + "','" + baseInfo.税务机关代码 + "','" + baseInfo.税收管理员代码 + "',sysdate,'" + baseInfo.街道代码
+ "','" + baseInfo.门牌号码 + "','" + baseInfo.建筑物代码 + "','" + baseInfo.楼层 + "','" + baseInfo.法定代表人 + "','" + baseInfo.手机号码
+ "','" + baseInfo.座机号码 + "','" + baseInfo.地方税务登记证号码 + "','" + baseInfo.行业代码 + "','" + baseInfo.行业细目代码
+ "','" + baseInfo.经营范围 + "','" + baseInfo.征收品目代码 + "'," + baseInfo.税收定额 + ")";
            return CmdUtil.ExcuteNonQuery(sql);
        }
        /**
         * 修改纳税户基本信息
         * */
        public static bool UpdateBaseInfo(基本信息 baseInfo)
        {
            string sql = @"update 基本信息表 set 纳税人类别=" + baseInfo.纳税人类别 + ",纳税人代码='" + baseInfo.纳税人代码
+ "',纳税人名称='" + baseInfo.纳税人名称 + "',操作时间=sysdate,税务机关代码='" + baseInfo.税务机关代码
+ "',税收管理员代码='" + baseInfo.税收管理员代码 + "',街道代码='" + baseInfo.街道代码
+ "',门牌号码='" + baseInfo.门牌号码 + "',建筑物代码='" + baseInfo.建筑物代码 + "',楼层='" + baseInfo.楼层 + "',法定代表人='" + baseInfo.法定代表人
+ "',手机号码='" + baseInfo.手机号码 + "',座机号码='" + baseInfo.座机号码 + "',地方税务登记证号码='" + baseInfo.地方税务登记证号码
+ "',行业代码='" + baseInfo.行业代码 + "',行业细目代码='" + baseInfo.行业细目代码 + "',经营范围='" + baseInfo.经营范围 + "',征收品目代码='" + baseInfo.征收品目代码
+ "',税收定额=" + baseInfo.税收定额 + 
",征收项目代码='"+baseInfo.征收项目代码+"' where 纳税人代码='" + baseInfo.纳税人代码 + "'";
            return CmdUtil.ExcuteNonQuery(sql);
        }

        /**
         * 修改税收定额
         **/
        public static bool UpdateMoney(string 纳税人代码, float 税收定额)
        {
            string sql = @"update 基本信息表 set 税收定额="+税收定额+" where 纳税人代码='"+纳税人代码+"'";
            return CmdUtil.ExcuteNonQuery(sql);
        }
        /**
         * 得到纳税户基本信息
         * */
        public static DataRow GetBaseInfoRow(string 纳税人代码)
        {
            string sql = @"select a.*,i.税务人员姓名 as 税收管理员,b.税务机关名称,c.行业名称,d.行业细目名称,
c.成本利润率 as 行业成本利润率,f.征收税率,f.设备定额,
e.征收项目名称 as 征收项目,f.征收品目名称 as 征收品目,g.街道名称,h.建筑物名称  
from 基本信息表 a 
left join 税务机关表 b on b.税务机关代码=a.税务机关代码 
left join 行业表 c on c.行业代码=a.行业代码 
left join 行业细目表 d on d.行业细目代码=a.行业细目代码 
left join 征收项目表 e on e.征收项目代码=a.征收项目代码 
left join 征收品目表 f on f.征收品目代码=a.征收品目代码 
left join 街道表 g on g.街道代码=a.街道代码 
left join 建筑物表 h on h.建筑物代码=a.建筑物代码 
left join 税务人员表 i on i.税务人员代码= a.税收管理员代码 
where a.纳税人代码='" + 纳税人代码 + "'";
            DataRow row = CmdUtil.ExcuteDataRow(sql);
            return row;
        }

        public static DataTable GetDropDown()
        {
            string sql = @"select 纳税人代码 as value,纳税人名称 as text from 基本信息表";
            return CmdUtil.ExcuteDataTable(sql);
        }


        public static 基本信息 GetBaseInfo(string 纳税人代码)
        {
            string sql = @"select * from 基本信息表 where 纳税人代码='" + 纳税人代码 + "'";
            DataRow row = CmdUtil.ExcuteDataRow(sql);
            基本信息 baseInfo = new 基本信息();
            if (row != null)
            {
                try
                {
                    baseInfo.操作时间 = DateTime.Parse(row["操作时间"].ToString());
                    baseInfo.地方税务登记证号码 = row["地方税务登记证号码"].ToString();
                    baseInfo.法定代表人 = row["法定代表人"].ToString();
                    baseInfo.行业代码 = row["行业代码"].ToString();
                    baseInfo.行业细目代码 = row["行业细目代码"].ToString();
                    baseInfo.建筑物代码 = row["建筑物代码"].ToString();
                    baseInfo.经营范围 = row["经营范围"].ToString();
                    baseInfo.街道代码 = row["街道代码"].ToString();
                    baseInfo.楼层 = row["楼层"].ToString();
                    baseInfo.门牌号码 = row["门牌号码"].ToString();
                    baseInfo.纳税人代码 = row["纳税人代码"].ToString();
                    baseInfo.纳税人类别 = int.Parse(row["纳税人类别"].ToString());
                    baseInfo.纳税人名称 = row["纳税人名称"].ToString();
                    baseInfo.手机号码 = row["手机号码"].ToString();
                    baseInfo.税收定额 = float.Parse(row["税收定额"].ToString());
                    baseInfo.税收管理员代码 = row["税收管理员代码"].ToString();
                    baseInfo.征收品目代码 = row["征收品目代码"].ToString();
                    baseInfo.税务机关代码 = row["税务机关代码"].ToString();
                    baseInfo.座机号码 = row["座机号码"].ToString();
                }
                catch
                {
                    return null;
                }
            }
            return baseInfo;
        }

        /*删除基本信息*/
        public static bool DeleteBaseInfo(string 纳税人代码)
        {
            string sql = @"delete from 基本信息表 where 纳税人代码='" + 纳税人代码 + "'";
            return CmdUtil.ExcuteNonQuery(sql);
        }

        /*删除基本信息*/
        public static bool DeleteBaseInfo(string[] 纳税人代码)
        {
            return CmdUtil.DeleteMuti("基本信息表", "纳税人代码", 纳税人代码);
        }
    }
}